package com.lkd.lkdadmin.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lkd.lkdadmin.service.ISkuClassService;
import com.lkd.lkdadmin.constant.MessageConstant;
import com.lkd.lkdadmin.exception.SkuClassBusinessException;
import com.lkd.lkdadmin.pojo.dto.SkuClassDTO;
import com.lkd.lkdadmin.pojo.dto.SkuClassPageQueryDTO;
import com.lkd.lkdadmin.pojo.enity.SkuClass;
import com.lkd.lkdadmin.pojo.result.R;
import com.lkd.lkdadmin.pojo.vo.SkuClassPageQueryResultVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 商品类别表 前端控制器
 * </p>
 *
 * @author author
 * @since 2025-02-08
 */
@RestController
@RequestMapping("/api/vm-service/skuClass")
@Api(tags = "商品类型管理")
@Slf4j
public class SkuClassController {

    @Autowired
    private ISkuClassService iSkuClassService;

    /**
     * 根据商品类型分页查询
     * @return
     */
    @GetMapping("/search")
    @ApiOperation("根据商品类型分页查询")
    public R<SkuClassPageQueryResultVO> pageQuerySku(SkuClassPageQueryDTO skuClassPageQueryDTO){

        Page<SkuClass> page = Page.of(skuClassPageQueryDTO.getPageIndex(),skuClassPageQueryDTO.getPageSize());

        LambdaQueryWrapper<SkuClass> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(skuClassPageQueryDTO.getClassName()),SkuClass::getClassName,skuClassPageQueryDTO.getClassName());
        Page<SkuClass> p = iSkuClassService.page(page, wrapper);
        return R.ok(SkuClassPageQueryResultVO
                .builder()
                .pageIndex(skuClassPageQueryDTO.getPageIndex())
                .pageSize(skuClassPageQueryDTO.getPageSize())
                .totalPage(p.getPages())
                .totalCount(p.getTotal())
                .currentPageRecords(p.getRecords())
                .build());
    }

    /**
     * 新增商品类型
     * @param skuClassDTO
     * @return
     */
    @PostMapping
    @ApiOperation("新增商品类型")
    public R insertSkuClass(@RequestBody SkuClassDTO skuClassDTO){
        log.info("新增商品类型为: {}" , skuClassDTO);
        //判断商品名称是否为空
        if (skuClassDTO.getClassName() == null || skuClassDTO.getClassName().isEmpty()){
            throw new SkuClassBusinessException(MessageConstant.SKU_CLASSNAME_IS_NULL);
        }
        SkuClass skuClass = new SkuClass();
        BeanUtils.copyProperties(skuClassDTO,skuClass);
        iSkuClassService.save(skuClass);
        return R.ok();
    }

    /**
     * 根据商品类型id查询商品分类信息
     * @param classId
     * @return
     */
    @GetMapping("/{classId}")
    @ApiOperation("根据商品类型id查询商品分类信息")
    public R<SkuClass> queryClassNameById(@PathVariable("classId") Integer classId){
        log.info("商品类型id为: {}" , classId);
        return R.ok(iSkuClassService.getById(classId));
    }

    /**
     * 修改商品类型
     * @return
     */
    @PutMapping
    @ApiOperation("修改商品类型")
    public R edit(@RequestBody SkuClassDTO skuClassDTO){
        log.info("修改商品类型信息: {}" ,skuClassDTO);
        SkuClass skuClass = new SkuClass();
        BeanUtils.copyProperties(skuClassDTO,skuClass);
        iSkuClassService.updateById(skuClass);
        return R.ok();
    }

    @DeleteMapping("/classId")
    @ApiOperation("删除商品类型")
    public R delete(@PathVariable("classId") Integer classId){
        log.info("删除商品类型id为: {}" ,classId);
        iSkuClassService.removeById(classId);
        return R.ok();
    }
}
